/***********************************************************************
 * Module:  ModeleCarteDrawer.java
 * Author:  Fabien Muguet
 * Purpose: Defines the Class CartePostaleDrawer
 ***********************************************************************/

package vue.composants;

import modele.*;
import modele.ModeleCarte.Orientation;

import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class CartePostaleDrawer extends JPanel {

    // Ressources
    protected Ressources ressources;

    // CartePostale à dessiner
    protected CartePostale cartePostale;

    // Taille d'une carte postale
    protected final int REALWIDTH = 1024;
    protected final int REALHEIGHT = 760;

    // Taille de la fenêtre de dessin
    protected int width;
    protected int height;

    // Facteur de redimensionnement
    protected double facteur = 0;

    // Dimension du CPD
    protected Dimension dimension;

    
    public CartePostaleDrawer(Ressources ressources, CartePostale cartePostale, String etapeCreation, Dimension dimension) {

        // On garde la référence vers le modèle à dessiner
        this.ressources = ressources;

        // On garde la référence vers le modèle à dessiner
        this.cartePostale = cartePostale;

        // On consèrve l'étape de création
        if( !verifEtapeCreation(etapeCreation) )
            System.out.println("[ERREUR] L'étape de création du CartePostaleDrawer est invalide : " + etapeCreation);

        // On garde la dimension
        this.dimension = dimension;

        // Taille du dessin
        width = (int)dimension.getWidth();
        height = (int)dimension.getHeight();

        // Si mode portrait, on inverse la taille de la fenêtre
        if( cartePostale.getModele().getOrientation() == Orientation.PORTRAIT ) {
            int tempWidth = height;
            height = width;
            width = tempWidth;
        }

        // Calcul du facteur de redimensionnement
        if( cartePostale.getModele().getOrientation() == Orientation.PAYSAGE )
            facteur = (double)width / (double)REALWIDTH;
        else
            facteur = (double)height / (double)REALWIDTH;

        // Taille du panel
        setSize(width, height);
        setPreferredSize( new Dimension(width, height) );
        
    }

    /**
     * Dessine le modele.
     * Cette méthode est surchargée dans tous les CPD fils.
     *
     * @param g Contexte graphique
     */
    public void paintComponent(Graphics g) {

    }

    
    public CartePostale getCartePostale() {
        return cartePostale;
    }

    public void setCartePostale(CartePostale cartePostale) {
        this.cartePostale = cartePostale;
    }



    /**
     * Redimensionne une coordonnée en prenant compte le facteur.
     *
     * @param coord Coordonnée à redimensionner
     */
    protected int redim(int coord) {
        return (int)Math.round(coord*facteur);
    }


    /**
     * Vérifie la validité de l'étape de création fournie.
     *
     * @param etapeCreation L'étape de création
     * @return true si l'étape existe, false sinon
     */
    public boolean verifEtapeCreation(String etapeCreation) {
        return (etapeCreation == "modele" || etapeCreation == "position" || etapeCreation == "texte" || etapeCreation == "imprimer");
    }
}